package com.relytosoft.mizar.media.camera.services.service;


import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.relytosoft.dubhe.common.core.base.page.PageQuery;
import com.relytosoft.mizar.media.camera.api.entity.CameraBase;
import com.relytosoft.mizar.media.camera.api.pojo.dto.CameraBaseDto;
import com.relytosoft.mizar.media.camera.api.pojo.vo.CameraBaseVo;
import com.relytosoft.mizar.media.camera.api.pojo.vo.SysDistrictVo;

import java.util.List;
import java.util.Map;


/**
 * @author lj
 */
public interface CameraBaseService extends IService<CameraBase> {


    /**
     * 查询设备ID和设备三方编码对应关系
     *
     * @return 对应关系
     */
    Map<String, Integer> findCameraCode();


    /**
     * 根据区域同步编码设备
     *
     * @param type 是否更新本数据库数据
     */
    void regionEncodeDevice(Integer type);


    /**
     * 分页条件查询设备
     *
     * @param cameraBaseDto 设备信息
     * @param pageQuery     分页参数
     * @return 设备信息
     */
    IPage<CameraBaseVo> selectCameraPageList(CameraBaseDto cameraBaseDto, PageQuery pageQuery);

    /**
     * 修改设备信息
     *
     * @param cameraBase 基础信息
     */
    boolean updateCamera(CameraBase cameraBase);

    /**
     * 查询设备详情
     *
     * @param id 设备ID
     * @return 设备详情
     */
    CameraBaseVo findById(Integer id);

    /**
     * 查询带设备数量的区域树
     *
     * @return 区域树
     */
    List<SysDistrictVo> findAreaTree();


    /**
     * 根据区域ID查询比特大陆的设备
     *
     * @param districtId 区域ID
     * @return 设备信息
     */
    List<CameraBaseVo> findByArea(Integer districtId);

    /**
     * 同步已填写密码的设备到BTDL
     *
     * @return 同步结果
     */
    String syncDeviceInfoToBtdlWithPassword();


    /**
     * 否见区域设备树信息
     *
     * @param districtId 区域ID
     * @param name       区域或设备名称
     * @return 区域设备树
     */
    List<Tree<Integer>> buildCameraDistrictListTree(Integer districtId, String name);


    /**
     * 根据设备ID查询设备名称或编码
     *
     * @param deviceIds 设备ID
     * @param type      1 查询设备name 2 查询编码信息
     * @return 设备信息
     */
    String findCameraNameOrCodeById(String deviceIds, Integer type);


}